Code coverage report for src/index.js

Statements: 65.82% (52 / 79)      Branches: 37.5% (6 / 16)      Functions: 65% (13 / 20)      Lines: 66.23% (51 / 77)      Ignored: none     

All files » src/ » index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 1651     1   3   1 3 3 3 3 3           1 3         3       3 1     3 3 3         1     1 1   1 1 3   3   3 3 3   3 3                 3 3       1               1 5 3     5     1 3       3   3 5   5 5   1     4       1                                                                         1 1 1                       1     1        
System.register([], function (_export) {
  'use strict';
 
  var BrowserMutationObserver, hasSetImmediate, TaskQueue;
 
  function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
 
  function makeRequestFlushFromMutationObserver(flush) {
    var toggle = 1;
    var observer = new BrowserMutationObserver(flush);
    var node = document.createTextNode('');
    observer.observe(node, { characterData: true });
    return function requestFlush() {
      toggle = -toggle;
      node.data = toggle;
    };
  }
 
  function makeRequestFlushFromTimer(flush) {
    return function requestFlush() {
      // We dispatch a timeout with a specified delay of 0 for engines that
      // can reliably accommodate that request. This will usually be snapped
      // to a 4 milisecond delay, but once we're flushing, there's no delay
      // between events.
      var timeoutHandle = setTimeout(handleFlushTimer, 0);
      // However, since this timer gets frequently dropped in Firefox
      // workers, we enlist an interval handle that will try to fire
      // an event 20 times per second until it succeeds.
      var intervalHandle = setInterval(handleFlushTimer, 50);
      function handleFlushTimer() {
        // Whichever timer succeeds will cancel both timers and request the
        // flush.
        clearTimeout(timeoutHandle);
        clearInterval(intervalHandle);
        flush();
      }
    };
  }
 
  return {
    setters: [],
    execute: function () {
      BrowserMutationObserver = window.MutationObserver || window.WebKitMutationObserver;
      hasSetImmediate = typeof setImmediate === 'function';
 
      TaskQueue = (function () {
        function TaskQueue() {
          var _this = this;
 
          _classCallCheck(this, TaskQueue);
 
          this.microTaskQueue = [];
          this.microTaskQueueCapacity = 1024;
          this.taskQueue = [];
 
          Eif (typeof BrowserMutationObserver === 'function') {
            this.requestFlushMicroTaskQueue = makeRequestFlushFromMutationObserver(function () {
              return _this.flushMicroTaskQueue();
            });
          } else {
            this.requestFlushMicroTaskQueue = makeRequestFlushFromTimer(function () {
              return _this.flushMicroTaskQueue();
            });
          }
 
          this.requestFlushTaskQueue = makeRequestFlushFromTimer(function () {
            return _this.flushTaskQueue();
          });
        }
 
        TaskQueue.prototype.queueMicroTask = function queueMicroTask(task) {
          if (this.microTaskQueue.length < 1) {
            this.requestFlushMicroTaskQueue();
          }
 
          this.microTaskQueue.push(task);
        };
 
        TaskQueue.prototype.queueTask = function queueTask(task) {
          if (this.taskQueue.length < 1) {
            this.requestFlushTaskQueue();
          }
 
          this.taskQueue.push(task);
        };
 
        TaskQueue.prototype.flushTaskQueue = function flushTaskQueue() {
          var queue = this.taskQueue,
              index = 0,
              task;
 
          this.taskQueue = []; //recursive calls to queueTask should be scheduled after the next cycle
 
          while (index < queue.length) {
            task = queue[index];
 
            try {
              task.call();
            } catch (error) {
              this.onError(error, task);
            }
 
            index++;
          }
        };
 
        TaskQueue.prototype.flushMicroTaskQueue = function flushMicroTaskQueue() {
          var queue = this.microTaskQueue,
              capacity = this.microTaskQueueCapacity,
              index = 0,
              task;
 
          while (index < queue.length) {
            task = queue[index];
 
            try {
              task.call();
            } catch (error) {
              this.onError(error, task);
            }
 
            index++;
 
            // Prevent leaking memory for long chains of recursive calls to `queueMicroTask`.
            // If we call `queueMicroTask` within a MicroTask scheduled by `queueMicroTask`, the queue will
            // grow, but to avoid an O(n) walk for every MicroTask we execute, we don't
            // shift MicroTasks off the queue after they have been executed.
            // Instead, we periodically shift 1024 MicroTasks off the queue.
            if (index > capacity) {
              // Manually shift all values starting at the index back to the
              // beginning of the queue.
              for (var scan = 0; scan < index; scan++) {
                queue[scan] = queue[scan + index];
              }
 
              queue.length -= index;
              index = 0;
            }
          }
 
          queue.length = 0;
        };
 
        TaskQueue.prototype.onError = function onError(error, task) {
          Eif ('onError' in task) {
            task.onError(error);
          } else if (hasSetImmediate) {
            setImmediate(function () {
              throw error;
            });
          } else {
            setTimeout(function () {
              throw error;
            }, 0);
          }
        };
 
        return TaskQueue;
      })();
 
      _export('TaskQueue', TaskQueue);
    }
  };
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3Rhc2stcXVldWUvc3JjL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztNQUFJLHVCQUF1QixFQUN2QixlQUFlLEVBa0NOLFNBQVM7Ozs7QUFoQ3RCLFdBQVMsb0NBQW9DLENBQUMsS0FBSyxFQUFFO0FBQ25ELFFBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNmLFFBQUksUUFBUSxHQUFHLElBQUksdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEQsUUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QyxZQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0FBQzlDLFdBQU8sU0FBUyxZQUFZLEdBQUc7QUFDN0IsWUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ2pCLFVBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0tBQ3BCLENBQUM7R0FDSDs7QUFFRCxXQUFTLHlCQUF5QixDQUFDLEtBQUssRUFBRTtBQUN4QyxXQUFPLFNBQVMsWUFBWSxHQUFHOzs7OztBQUs3QixVQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7QUFJcEQsVUFBSSxjQUFjLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELGVBQVMsZ0JBQWdCLEdBQUc7OztBQUcxQixvQkFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzVCLHFCQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDOUIsYUFBSyxFQUFFLENBQUM7T0FDVDtLQUNGLENBQUM7R0FDSDs7Ozs7QUFqQ0csNkJBQXVCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FB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QUksR0FBRyxLQUFLLENBQUMsQ0FBQztlQUNyQzs7QUFFRCxtQkFBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDdEIsbUJBQUssR0FBRyxDQUFDLENBQUM7YUFDYjtXQUNGOztBQUVELGVBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCOztBQXRGVSxpQkFBUyxXQXdGcEIsT0FBTyxHQUFBLGlCQUFDLEtBQUssRUFBRSxJQUFJLEVBQUM7QUFDbEIsY0FBRyxTQUFTLElBQUksSUFBSSxFQUFDO0FBQ25CLGdCQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1dBQ3JCLE1BQU0sSUFBSSxlQUFlLEVBQUU7QUFDMUIsd0JBQVksQ0FBQyxZQUFNO0FBQUUsb0JBQU0sS0FBSyxDQUFDO2FBQUUsQ0FBQyxDQUFDO1dBQ3RDLE1BQU07QUFDTCxzQkFBVSxDQUFDLFlBQU07QUFBRSxvQkFBTSxLQUFLLENBQUM7YUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQ3ZDO1NBQ0Y7O2VBaEdVLFNBQVM7OzsyQkFBVCxTQUFTIiwiZmlsZSI6Ii9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3Rhc2stcXVldWUvc3JjL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgaGFzU2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJztcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3RGbHVzaEZyb21NdXRhdGlvbk9ic2VydmVyKGZsdXNoKSB7XG4gIHZhciB0b2dnbGUgPSAxO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZX0pO1xuICByZXR1cm4gZnVuY3Rpb24gcmVxdWVzdEZsdXNoKCkge1xuICAgIHRvZ2dsZSA9IC10b2dnbGU7XG4gICAgbm9kZS5kYXRhID0gdG9nZ2xlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBtYWtlUmVxdWVzdEZsdXNoRnJvbVRpbWVyKGZsdXNoKSB7XG4gIHJldHVybiBmdW5jdGlvbiByZXF1ZXN0Rmx1c2goKSB7XG4gICAgLy8gV2UgZGlzcGF0Y2ggYSB0aW1lb3V0IHdpdGggYSBzcGVjaWZpZWQgZGVsYXkgb2YgMCBmb3IgZW5naW5lcyB0aGF0XG4gICAgLy8gY2FuIHJlbGlhYmx5IGFjY29tbW9kYXRlIHRoYXQgcmVxdWVzdC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgc25hcHBlZFxuICAgIC8vIHRvIGEgNCBtaWxpc2Vjb25kIGRlbGF5LCBidXQgb25jZSB3ZSdyZSBmbHVzaGluZywgdGhlcmUncyBubyBkZWxheVxuICAgIC8vIGJldHdlZW4gZXZlbnRzLlxuICAgIHZhciB0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChoYW5kbGVGbHVzaFRpbWVyLCAwKTtcbiAgICAvLyBIb3dldmVyLCBzaW5jZSB0aGlzIHRpbWVyIGdldHMgZnJlcXVlbnRseSBkcm9wcGVkIGluIEZpcmVmb3hcbiAgICAvLyB3b3JrZXJzLCB3ZSBlbmxpc3QgYW4gaW50ZXJ2YWwgaGFuZGxlIHRoYXQgd2lsbCB0cnkgdG8gZmlyZVxuICAgIC8vIGFuIGV2ZW50IDIwIHRpbWVzIHBlciBzZWNvbmQgdW50aWwgaXQgc3VjY2VlZHMuXG4gICAgdmFyIGludGVydmFsSGFuZGxlID0gc2V0SW50ZXJ2YWwoaGFuZGxlRmx1c2hUaW1lciwgNTApO1xuICAgIGZ1bmN0aW9uIGhhbmRsZUZsdXNoVGltZXIoKSB7XG4gICAgICAvLyBXaGljaGV2ZXIgdGltZXIgc3VjY2VlZHMgd2lsbCBjYW5jZWwgYm90aCB0aW1lcnMgYW5kIHJlcXVlc3QgdGhlXG4gICAgICAvLyBmbHVzaC5cbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxIYW5kbGUpO1xuICAgICAgZmx1c2goKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUYXNrUXVldWUge1xuICBjb25zdHJ1Y3Rvcigpe1xuICAgIHRoaXMubWljcm9UYXNrUXVldWUgPSBbXTtcbiAgICB0aGlzLm1pY3JvVGFza1F1ZXVlQ2FwYWNpdHkgPSAxMDI0O1xuICAgIHRoaXMudGFza1F1ZXVlID0gW107XG5cbiAgICBpZiAodHlwZW9mIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnJlcXVlc3RGbHVzaE1pY3JvVGFza1F1ZXVlID0gbWFrZVJlcXVlc3RGbHVzaEZyb21NdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMuZmx1c2hNaWNyb1Rhc2tRdWV1ZSgpKTtcbiAgICB9ZWxzZSB7XG4gICAgICB0aGlzLnJlcXVlc3RGbHVzaE1pY3JvVGFza1F1ZXVlID0gbWFrZVJlcXVlc3RGbHVzaEZyb21UaW1lcigoKSA9PiB0aGlzLmZsdXNoTWljcm9UYXNrUXVldWUoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0Rmx1c2hUYXNrUXVldWUgPSBtYWtlUmVxdWVzdEZsdXNoRnJvbVRpbWVyKCgpID0+IHRoaXMuZmx1c2hUYXNrUXVldWUoKSk7XG4gIH1cblxuICBxdWV1ZU1pY3JvVGFzayh0YXNrKXtcbiAgICBpZiAodGhpcy5taWNyb1Rhc2tRdWV1ZS5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLnJlcXVlc3RGbHVzaE1pY3JvVGFza1F1ZXVlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5taWNyb1Rhc2tRdWV1ZS5wdXNoKHRhc2spO1xuICB9XG5cbiAgcXVldWVUYXNrKHRhc2spe1xuICAgIGlmICh0aGlzLnRhc2tRdWV1ZS5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLnJlcXVlc3RGbHVzaFRhc2tRdWV1ZSgpO1xuICAgIH1cblxuICAgIHRoaXMudGFza1F1ZXVlLnB1c2godGFzayk7XG4gIH1cblxuICBmbHVzaFRhc2tRdWV1ZSgpe1xuICAgIHZhciBxdWV1ZSA9IHRoaXMudGFza1F1ZXVlLFxuICAgICAgICBpbmRleCA9IDAsXG4gICAgICAgIHRhc2s7XG5cbiAgICB0aGlzLnRhc2tRdWV1ZSA9IFtdOyAvL3JlY3Vyc2l2ZSBjYWxscyB0byBxdWV1ZVRhc2sgc2hvdWxkIGJlIHNjaGVkdWxlZCBhZnRlciB0aGUgbmV4dCBjeWNsZVxuXG4gICAgd2hpbGUgKGluZGV4IDwgcXVldWUubGVuZ3RoKSB7XG4gICAgICB0YXNrID0gcXVldWVbaW5kZXhdO1xuXG4gICAgICB0cnl7XG4gICAgICAgIHRhc2suY2FsbCgpO1xuICAgICAgfSBjYXRjaChlcnJvcil7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnJvciwgdGFzayk7XG4gICAgICB9XG5cbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICB9XG5cbiAgZmx1c2hNaWNyb1Rhc2tRdWV1ZSgpe1xuICAgIHZhciBxdWV1ZSA9IHRoaXMubWljcm9UYXNrUXVldWUsXG4gICAgICAgIGNhcGFjaXR5ID0gdGhpcy5taWNyb1Rhc2tRdWV1ZUNhcGFjaXR5LFxuICAgICAgICBpbmRleCA9IDAsXG4gICAgICAgIHRhc2s7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHRhc2sgPSBxdWV1ZVtpbmRleF07XG5cbiAgICAgIHRyeXtcbiAgICAgICAgdGFzay5jYWxsKCk7XG4gICAgICB9IGNhdGNoKGVycm9yKXtcbiAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yLCB0YXNrKTtcbiAgICAgIH1cblxuICAgICAgaW5kZXgrKztcblxuICAgICAgLy8gUHJldmVudCBsZWFraW5nIG1lbW9yeSBmb3IgbG9uZyBjaGFpbnMgb2YgcmVjdXJzaXZlIGNhbGxzIHRvIGBxdWV1ZU1pY3JvVGFza2AuXG4gICAgICAvLyBJZiB3ZSBjYWxsIGBxdWV1ZU1pY3JvVGFza2Agd2l0aGluIGEgTWljcm9UYXNrIHNjaGVkdWxlZCBieSBgcXVldWVNaWNyb1Rhc2tgLCB0aGUgcXVldWUgd2lsbFxuICAgICAgLy8gZ3JvdywgYnV0IHRvIGF2b2lkIGFuIE8obikgd2FsayBmb3IgZXZlcnkgTWljcm9UYXNrIHdlIGV4ZWN1dGUsIHdlIGRvbid0XG4gICAgICAvLyBzaGlmdCBNaWNyb1Rhc2tzIG9mZiB0aGUgcXVldWUgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhlY3V0ZWQuXG4gICAgICAvLyBJbnN0ZWFkLCB3ZSBwZXJpb2RpY2FsbHkgc2hpZnQgMTAyNCBNaWNyb1Rhc2tzIG9mZiB0aGUgcXVldWUuXG4gICAgICBpZiAoaW5kZXggPiBjYXBhY2l0eSkge1xuICAgICAgICAgIC8vIE1hbnVhbGx5IHNoaWZ0IGFsbCB2YWx1ZXMgc3RhcnRpbmcgYXQgdGhlIGluZGV4IGJhY2sgdG8gdGhlXG4gICAgICAgICAgLy8gYmVnaW5uaW5nIG9mIHRoZSBxdWV1ZS5cbiAgICAgICAgICBmb3IgKHZhciBzY2FuID0gMDsgc2NhbiA8IGluZGV4OyBzY2FuKyspIHtcbiAgICAgICAgICAgICAgcXVldWVbc2Nhbl0gPSBxdWV1ZVtzY2FuICsgaW5kZXhdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHF1ZXVlLmxlbmd0aCAtPSBpbmRleDtcbiAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWUubGVuZ3RoID0gMDtcbiAgfVxuXG4gIG9uRXJyb3IoZXJyb3IsIHRhc2spe1xuICAgIGlmKCdvbkVycm9yJyBpbiB0YXNrKXtcbiAgICAgIHRhc2sub25FcnJvcihlcnJvcik7XG4gICAgfSBlbHNlIGlmIChoYXNTZXRJbW1lZGlhdGUpIHtcbiAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7IHRocm93IGVycm9yOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRocm93IGVycm9yOyB9LCAwKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==